package service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

import exception.DuplicatedIdException;

import org.springframework.web.multipart.MultipartFile;

import dao.MemberDAO;
import dto.MemberDTO;

public class MemberService {
	private MemberDAO dao;
	private String pictureDir;
	public MemberService(MemberDAO dao) {
		this.dao = dao;
	}
	

	public MemberService(MemberDAO dao, String pictureDir) {
		super();
		this.dao = dao;
		this.pictureDir = pictureDir;
	}

	public String getPictureDir() {
		return pictureDir;
	}

	public void setPictureDir(String pictureDir) {
		this.pictureDir = pictureDir;
	}

	// 가입처리 메소드
	public void registerMember(MemberDTO mdto) throws Exception,IllegalStateException, IOException,SQLException{
		// 1. 등록된 ID가 있는지 체크
		if(dao.selectMemberById(mdto.getMember_id())!=null){
			throw new DuplicatedIdException(mdto.getMember_id()+"는 이미 등록된 아이디 입니다.");
		}
		// 사진 업로드 처리
		MultipartFile file = mdto.getUpfile();
		if( !file.isEmpty() ){// 사진이 업로드 됬을때
			String fileName = file.getOriginalFilename();// 업로드된 파일 이름
			String time =Long.toString(System.currentTimeMillis());// 현재시간
			String fileNameFinal = time+"_"+fileName;	// 최종파일명 
			System.out.println("저장되는 파일명 : "+fileNameFinal);
			file.transferTo(new File(pictureDir,fileNameFinal));// 파일 이동
			mdto.setPicture_filename(fileNameFinal);
		}else{	// 사진이 업로드 되지 않았을 경우 (기존 default.png 파일 추가)
			mdto.setPicture_filename("default.PNG");
		}
		// 초기 amount 값 저장
		mdto.setAmount(0);
		// DB 작업
		dao.insertMember(mdto);
	}
	//	Id로 멤버 조회
	public MemberDTO getMemberById(String member_id) throws SQLException{
		return dao.selectMemberById(member_id);
	}

	// 회원 정보 수정
	public MemberDTO updateMember(MemberDTO old_mdto,MemberDTO new_mdto) throws IllegalStateException, IOException {
		MultipartFile file = new_mdto.getUpfile();
		new_mdto.setMember_id(old_mdto.getMember_id());
		if( !file.isEmpty()){// 사진 파일이 변경된 경우
			// 파일 저장부
			String fileName = file.getOriginalFilename();	// 업로드된 파일 이름
			String time = Long.toString(System.currentTimeMillis());	// 현재 시간
			String fileNameFinal = time+"_"+fileName;	// 최종 파일명
			System.out.println("저장되는 파일명 : "+fileNameFinal);	
			file.transferTo(new File(pictureDir, fileNameFinal));	// 파일 이동
			new_mdto.setPicture_filename(fileNameFinal);
			// 기존 파일 삭제
			File delete_file = new File(pictureDir, old_mdto.getPicture_filename());
			delete_file.delete();
			// 업데이트 실행
			dao.updateMember(new_mdto);
		}else{// 사진 파일을 변경하지 않은 경우
			// 원 사진 파일명 얻기
			String picture_filename = old_mdto.getPicture_filename();
			// 수정한 member에 사진파일명 추가
			new_mdto.setPicture_filename(picture_filename);
			dao.updateMember(new_mdto);
		}
		// 바뀐 정보를 갖는 mdto를 리턴
		return dao.selectMemberById(old_mdto.getMember_id());
	}
	
	
}
